﻿using Microsoft.Win32;
using System.Windows;

namespace Wpf_Model_Centered
{
    /// <summary>
    /// 主窗体代码，从这里开始阅读。
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            /*
             * 以模型为中心的 WPF 程序，其界面表达可在模型类型中定义。
             * 对于此演示程序，为 SampleEntity 类。现在，转到其定义查看说明。
             */
            Entity = new SampleEntity();

            /*
             * 欢迎回来，以下部分介绍将模型实例保存到文件/从文件加载的操作。
             * 对话框初始化后，直接阅读 Save_Click 和 Load_Click 方法，它们分别响应了界面上的 保存 和 加载 请求。
             */
            dialog_save = new SaveFileDialog() { Filter = "*.xml|*.xml" };
            dialog_open = new OpenFileDialog() { Filter = "*.xml|*.xml" };

            DataContext = this;
        }

        public SampleEntity Entity { get; set; }

        SaveFileDialog dialog_save;
        OpenFileDialog dialog_open;

        private void Save_Click(object sender, RoutedEventArgs e)
        {
            if (dialog_save.ShowDialog() == true)
            {
                /*
                 * 如 SampleEntity 代码页所述，实例化 EntitySilo 并对其设置。
                 * 加载过程与此类似。
                 */
                Heroius.Files.EntitySilo silo = new Heroius.Files.EntitySilo();
                silo.AutoStore = false; //仅保存显示标记的属性
                silo.Recursion = true; //启用复杂类型支持
                silo.HandleElements = true; //启用集合类型支持
                silo.Store("entity", Entity); //将实体保存到某个键
                silo.Save(dialog_save.FileName); //将 EntitySilo 的内容保存到文件
            }
        }

        private void Load_Click(object sender, RoutedEventArgs e)
        {
            if (dialog_open.ShowDialog() == true)
            {
                Heroius.Files.EntitySilo silo = new Heroius.Files.EntitySilo();
                silo.AutoStore = false;
                silo.Recursion = true;
                silo.HandleElements = true;
                silo.Load(dialog_open.FileName); //从文件加载 EntitySilo 内容
                silo.Fetch("entity", Entity); //根据键获取实体内容
            }
        }
    }
}
